package com.ggh.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SpecialBrand {// 牌型计算
	// 宫：12.12，2.2，8.8，4.4，10.10，6.6，4.4 （14个，下标：0~13）
	// 么：11.11，10.10，7.7，6.6 （8个，下标：14~21）
	// 点：9.9，8.8，7.7，6，5.5，3 （10个，下标：22~31）

	// 定义牌型{ 12, 2, 8, 4,
	//									10, 6, 4,11,
	//									7, 10, 6, 9,
	//									9, 8,  8, 7,
	//									7, 6, 5, 5, 3 };
	int[] brands = { 12, 2, 8, 4, 10, 6, 4, 11,7,10, 6, 9, 9, 8, 8, 7, 7, 6, 5, 5, 3 };

	// 计算所有特殊牌型（共13级）
	List<String> list = new ArrayList<String>();
	// 分类存储单张牌型
	Map<Integer, String> brandMap = new HashMap<Integer, String>();
	//特殊
	Map<String, String> brandMapTS = new HashMap<String, String>();
	/*
	点子大小
	* */
	List<String>   dList=new ArrayList<>();

	String d1 = "17&20-20&17";// 至尊
	String d2 = "0&0";// 双天
	String d3 = "1&1";// 双地
	String d4 = "2&2";// 双人
	String d5 = "3&3";// 双和
	String d6 = "4&4";// 双梅
	String d7 = "5&5";// 双长
	String d8 = "6&6";// 双板凳
	String d9 = "7&7";// 双斧头
	String d10 = "8&8";// 双红头
	String d11 = "9&9";// 双高脚
	String d12 = "10&10";// 双零霖
	String d13 = "11&12-12&11";// 杂九
	String d14 = "13&14-14&13";// 杂八
	String d15 = "15&16-16&15";// 杂七
	String d16 = "18&19-19&18";// 杂五
	String d17 = "";// 天九王 王爷
	String d18 = "";// 地九王
	String d19 = "";// 天槓
	String d20 = "";// 地槓
	String d21 = "";// 天高九
	String d22 = "";// 地高九
	String d23 = "";//炸弹
	String d24 = "7&11-7&12-12&7-11&7";//鬼子
	//牌型
	String na="炸弹";
	String ngz="鬼子";
	String nt="天九王";
	String nd="地九娘娘";
	String ntg ="天杠";
	String ndg ="地杠";
	String n1 ="至尊";
	String n2 ="对天";
	String n3 ="对地";
	String n4 ="对人";
	String n5 ="对鹅";
	String n6 ="对长";
	String n7 ="对短";
	String n8 ="对杂九";
	String n9="对杂八";
	String n10 ="对杂七";
	String n11 ="对杂五";
	String n12 ="天杠";
	String n13 ="地杠";

	//单个牌组
	String z="杂";
	String t="天";
	String d="地";
	String r="人";
	String e="鹅";
	String chang="长";
	String duan="短";
	String s1="一";
	String s2="二";
	String s3="三";
	String s4="四";
	String s5="五";
	String s6="六";
	String s7="七";
	String s8="八";
	String s9="九";
	String s10="毕十";








	public SpecialBrand() {
		ts();
	}

	/**
	 * 计算，获取特殊牌型
	 */
	public void ts() {
		// d2 += i + "&" + j + "-";
		// 循环所有牌的信息
		for (int i = 0; i < brands.length; i++) {
			// 天九王：天牌配任何一种9点牌，即天牌配杂九牌，特点是点数为12+9=21，
			if (brands[i] + 12 == 21) {
				d17 += 0 + "&" + i + "-";
				d17 += i + "&" + 0 + "-";
			}
			// 地九娘娘：地牌配任何一种9点牌，即地牌配杂九牌。特点是点数为2+9=11
			/*if (brands[i] + 2 == 11) {
				d18 += 1 + "&" + i + "-";
				d18 += i + "&" + 1 + "-";
			}*/
			// 天杠：天牌配任何一种8点牌，即天牌配人牌或杂八牌。特点是点数为12+8=20
			if (brands[i] + 12 == 20) {
				d19 += 0 + "&" + i + "-";
				d19 += i + "&" + 0 + "-";
			}
			// 地杠：地牌配任何一种8点牌，即地牌配人牌或杂八牌。特点是点数为2+8=10
			if (brands[i] + 2 == 10) {
				d20 += 1 + "&" + i + "-";
				d20 += i + "&" + 1 + "-";
			}
			//炸弹：最小牌配任何一种8点牌，即为炸弹。特点是点数为3+8=11
			/*if (brands[i] + 8 == 10){
				d23+=

			}*/
			/*// 天高九：天牌配杂七中的二五牌，特点是点数为12+7=19，算个位数是9
			if (brands[i] + 12 == 19) {
				d21 += 0 + "&" + i + "-";
				d21 += i + "&" + 0 + "-";
			}
			// 地高九：地牌配高脚七牌，特点是点数为2+7=9，算个位数是9。
			if (brands[i] + 2 == 9) {
				d22 += 1 + "&" + i + "-";
				d22 += i + "&" + 1 + "-";
			}*/
		}

		// 信息放入集合
		list.add(d1);
		list.add(d2);
		list.add(d3);
		list.add(d4);
		list.add(d5);
		list.add(d6);
		list.add(d7);
		list.add(d8);
		list.add(d9);
		list.add(d10);
		list.add(d11);
		list.add(d12);
		list.add(d13);
		list.add(d14);
		list.add(d15);
		list.add(d16);
		//list.add(d17);
		//list.add(d18);
		list.add(d19);
		list.add(d20);
		list.add(d21);
		list.add(d22);
		//list.add(d24);
		//单张牌型
		brandMap.put(0,t);
		brandMap.put(1,d);
		brandMap.put(2,r);
		brandMap.put(3,e);
		brandMap.put(4,chang);
		brandMap.put(5,chang);
		brandMap.put(6,chang);
		brandMap.put(7,duan);
		brandMap.put(8,duan);
		brandMap.put(9,duan);
		brandMap.put(10,duan);
		brandMap.put(11,z);
		brandMap.put(12,z);
		brandMap.put(13,z);
		brandMap.put(14,z);
		brandMap.put(15,z);
		brandMap.put(16,z);
		brandMap.put(17,z);
		brandMap.put(18,z);
		brandMap.put(19,z);
		brandMap.put(20,z);
		//特殊牌型
		brandMapTS.put(d1,n1);
		brandMapTS.put(d2,n2);
		brandMapTS.put(d3,n3);
		brandMapTS.put(d4,n4);
		brandMapTS.put(d5,n5);
		brandMapTS.put(d6,n6);
		brandMapTS.put(d7,n6);
		brandMapTS.put(d8,n6);
		brandMapTS.put(d9,n7);
		brandMapTS.put(d10,n7);
		brandMapTS.put(d11,n7);
		brandMapTS.put(d12,n7);
		brandMapTS.put(d13,n8);
		brandMapTS.put(d14,n9);
		brandMapTS.put(d15,n10);
		brandMapTS.put(d16,n11);
		brandMapTS.put(d17,nt);
		brandMapTS.put(d18,nd);
		brandMapTS.put(d19,n12);
		brandMapTS.put(d20,n13);
		//点子
		dList.add(s1);
		dList.add(s2);
		dList.add(s3);
		dList.add(s4);
		dList.add(s5);
		dList.add(s6);
		dList.add(s7);
		dList.add(s8);
		dList.add(s9);
		dList.add(s10);





	}

	/**
	 * 判断用户手里的牌---特殊牌型
	 * 大牌九
	 * 
	 * @param
	 */
	public HashMap brandType(int[] str) {
		HashMap map=new HashMap();
		int jg = 30;
		/*结果
		* */
		String px = "";
		/*目标
		* */
		String mb="";
		int[] brand = { brands[str[0]], brands[str[1]] };
		// if (brand[0] == brand[1]) {// 判断2个数值是否相同
		// 拼接字符串
		String pj1 = str[0] + "&" + str[1];
		String pj2 = str[1] + "&" + str[0];
		// 循环所有特殊牌型，判断特殊牌型的位置
		for (int j = 0; j < list.size(); j++) {// j:循环的 是特殊牌型的集合
			// 拆分特殊牌型字符串
			String[] ts = list.get(j).split("-");
			// 循环判断牌值
			for (int k = 0; k < ts.length; k++) {
				if (pj1.equals(ts[k]) || pj2.equals(ts[k])) {
					jg = j;
					mb=list.get(j);
					System.out.println("特殊牌型-一样:" + brand[0] + "+" + brand[1]);
					continue;
				}
			}

		}
		if (jg!=30){
			px=brandMapTS.get(mb);
		}
		map.put(1,jg);
		map.put(2,px);
		return map;
	}
	/**
	 * 判断用户手里的牌---特殊牌型
	 * 大牌九
	 *
	 * @param
	 */
	public HashMap brandTypeD(int[] str) {
		HashMap map=new HashMap();
		int jg = 30;
		/*结果
		 * */
		String px = "";
		/*目标
		 * */
		String mb="";
		int[] brand = { brands[str[0]], brands[str[1]] };
		// if (brand[0] == brand[1]) {// 判断2个数值是否相同
		// 拼接字符串
		String pj1 = str[0] + "&" + str[1];
		String pj2 = str[1] + "&" + str[0];
		List<String> list1=new ArrayList<>(list);

		list1.add(0,d24);
		list1.add(1,d17);
		// 循环所有特殊牌型，判断特殊牌型的位置
		for (int j = 0; j < list1.size(); j++) {// j:循环的 是特殊牌型的集合
			// 拆分特殊牌型字符串
			String[] ts = list1.get(j).split("-");
			// 循环判断牌值
			for (int k = 0; k < ts.length; k++) {
				if (pj1.equals(ts[k]) || pj2.equals(ts[k])) {
					jg = j;
					mb=list1.get(j);
					System.out.println("特殊牌型-一样:" + brand[0] + "+" + brand[1]);
					continue;
				}
			}

		}
		list1=null;
		if (jg!=30){
			px=brandMapTS.get(mb);
		}
		map.put(1,jg);
		map.put(2,px);
		return map;
	}


	// 计算点子
	public HashMap dz(int[] str) {
		HashMap map=new HashMap();
		//单牌字
		String s1="";
		//点子字
		String s2="";
		//总字
		String sz="";
		//牌下标
		int p1=str[0];
		int p2=str[1];
		//牌
		int a1 = brands[str[0]];
		int a2 = brands[str[1]];
		System.out.println();
		//点子
		int o1 = a1 + a2;
		int rsl=o1%10;
		if (rsl==0){
			rsl=10;
		}
		//谁是王者
		if (p1<p2){
			 s1 = brandMap.get(p1);
		}else {
			 s1 = brandMap.get(p2);
		}
		//点子字
		s2 =dList.get(rsl-1);
		if (o1%10==0) {
			sz=dList.get(9);
		}else {
			sz=s1+s2;
		}

		map.put(0,rsl+22);
		map.put(1,sz);
		return map;

	}



	public static void main(String[] args) {
		SpecialBrand sp = new SpecialBrand();
		int[] str={7,12};
		sp.brandTypeD(str);
		for (int i = 0; i < sp.list.size(); i++) {
			System.out.println(i + 1 + "---:" + sp.list.get(i));
		}
	}
}
